package ar.fiuba.tp7552.buildadmin.model.gastos;

import java.util.Collection;

import ar.fiuba.tp7552.buildadmin.model.BaseEntity;
import ar.fiuba.tp7552.buildadmin.model.builds.TipoPropiedad;

public class TipoGasto extends BaseEntity {
	
	private String codigo;
	private String descripcion;
	private Categoria categoria;
	private Collection<Prorrateo> prorrateos;
	
	/**
	 * Asocia el Tipo de Gasto a un tipo de propiedad. 
	 * Si ya existe lo actualiza.
	 * @return
	 */
	public Prorrateo asociar(TipoPropiedad tipoProp, Double coef) {
		for (Prorrateo p : prorrateos) {
			Long tpropId = p.getTipoPropiedad().getId();
			if (tpropId.equals(tipoProp.getId())) {
				p.setCoeficiente(coef);
				return p;
			}
		}
		
		Prorrateo prorrateo = new Prorrateo();
		prorrateo.setTipoGasto(this);
		this.prorrateos.add(prorrateo);
		tipoProp.getProrrateos().add(prorrateo);
		prorrateo.setTipoPropiedad(tipoProp);
		prorrateo.setCoeficiente(coef);
		
		return prorrateo;
	}
	
	/**
	 * Desasocia el Tipo de Gasto a un tipo de propiedad. 
	 * @return
	 */
	public Prorrateo desasociar(TipoPropiedad tipoProp) {
		for (Prorrateo p : prorrateos) {
			Long tpropId = p.getTipoPropiedad().getId();
			if (tpropId.equals(tipoProp.getId())) {
				this.prorrateos.remove(p);
				tipoProp.getProrrateos().remove(p);
				return p;
			}
		}

		return null;
	}
	
	
	//~~ getters y setters ===========================================================

	public String getCodigo() {
		return codigo;
	}
	@Override
	public boolean equals(Object obj) {
		if (!(obj instanceof TipoGasto) || obj == null)
			return false;
		TipoGasto other = (TipoGasto)obj;
		if (other.codigo == null || this.codigo == null)
			return false;
		if (other.codigo.equals(this.codigo))
			return true;
		return false;
	}
	@Override
	public int hashCode() {
		return codigo.hashCode();
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public Collection<Prorrateo> getProrrateos() {
		return prorrateos;
	}
	public void setProrrateos(Collection<Prorrateo> prorrateos) {
		this.prorrateos = prorrateos;
	}
	public Categoria getCategoria() {
		return categoria;
	}
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
}
